# cmake 所需要的最低版本，通过 cmake --version 可以查看cmake工具的版本
cmake_minimum_required(VERSION 2.8)
# 项目名称，注意命名规则，按照C的变量名的规则
project(TCP_Example)

# 因为cmake是工作在linux下面的，在windows中，需要一套linux的工具提供支持，例如MSYS2。建议大家在Linux下完成。这句是标注C下面的环境兼容性。
SET(CMAKE_GENERATOR “MSYS Makefiles”)

# C编译器使用的标准
set(CMAKE_C_FLAGS "-std=gnu99")

# 生成的代码可以用于GDB调试
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
# 编译过程中警告级别
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

# 设置动态链接库的搜索路径RPATH，可执行文件在linux下可以在当前路径搜索动态链接库
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,'$ORIGIN'")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath,'$ORIGIN'")

# 源文件的预编译选项，可以在这里传入预编译宏的定义，而不必写在代码中。类似代码中的 #define 宏
# ADD_DEFINITIONS(-D_TEST)

# 打印消息
MESSAGE("current platform: Linux ")

# Server 源文件，第一行 SOURCE_SERVER 代表整个源文件的一个标识，后面是源代码列表（可以多个源文件）。以后直接使用 SOURCE_SERVER 就可以指代后面的所有源文件。
set(SOURCE_SERVER
        src/server.c
        )

# Client 源文件，这里的标识是 SOURCE_CLIENT
set(SOURCE_CLIENT
        src/client.c
        )

# 工程中头文件存放位置。${PROJECT_SOURCE_DIR}是预定义变量，表示项目所在的目录。
include_directories(
        "${PROJECT_SOURCE_DIR}/src"
)

# 需要连接的静态库文件，如果需要三方库，请在这里列出
link_libraries(

)

# 设置编译后文件的输出位置
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

# Server主程序，
# server 编译后的可执行文件的名称
# 注意 ${SOURCE_SERVER} 标识一个变量，就是前面定义的 SOURCE_SERVER 源文件标识，可以指代多个源文件。
add_executable(server ${SOURCE_SERVER})

# Client主程序，
# client 编译后的可执行文件的名称
# 注意 ${SOURCE_CLIENT} 标识一个变量，就是前面定义的 SOURCE_CLIENT 源文件标识，可以指代多个源文件。
add_executable(client ${SOURCE_CLIENT})

# https://idiotdeveloper.com/file-transfer-using-tcp-socket-in-c/
# https://www.geeksforgeeks.org/tcp-server-client-implementation-in-c/

